// 用户角色权限管理相关API请求
import { get, post, put, del } from '@/request/axios'
import type { ApiResponse } from '@/model/common-model'
import type { 
  User, Role, Permission, UserCreateRequest, UserUpdateRequest, 
  RoleCreateRequest, RoleUpdateRequest, PermissionCreateRequest, PermissionUpdateRequest,
  ChangePasswordRequest, ResetPasswordRequest, PageQueryParams,
  UserPageResponse, RolePageResponse, PermissionListResponse, PermissionTreeResponse
} from '@/model/user-role-model'

// 使用空字符串作为API前缀，因为axios的baseURL已经设置为'/api'
const API_PREFIX = ''

// =========== 用户管理 API ===========

/**
 * 获取用户列表
 * @param params 查询参数
 * @returns 用户列表和总数
 */
export function getUsers(params?: PageQueryParams): Promise<UserPageResponse> {
  return get(`${API_PREFIX}/users`, params)
}

/**
 * 获取用户详情
 * @param userId 用户ID
 * @returns 用户详情
 */
export function getUserDetail(userId: number): Promise<ApiResponse & { data: User }> {
  return get(`${API_PREFIX}/users/${userId}`)
}

/**
 * 创建用户
 * @param data 用户数据
 * @returns 创建结果
 */
export function createUser(data: UserCreateRequest): Promise<ApiResponse & { data: User }> {
  return post(`${API_PREFIX}/users`, data)
}

/**
 * 更新用户
 * @param userId 用户ID
 * @param data 用户数据
 * @returns 更新结果
 */
export function updateUser(userId: number, data: UserUpdateRequest): Promise<ApiResponse & { data: User }> {
  return put(`${API_PREFIX}/users/${userId}`, data)
}

/**
 * 删除用户
 * @param userId 用户ID
 * @returns 删除结果
 */
export function deleteUser(userId: number): Promise<ApiResponse> {
  return del(`${API_PREFIX}/users/${userId}`)
}

/**
 * 修改用户密码
 * @param userId 用户ID
 * @param data 密码数据
 * @returns 修改结果
 */
export function changePassword(userId: number, data: ChangePasswordRequest): Promise<ApiResponse> {
  return post(`${API_PREFIX}/users/${userId}/change-password`, data)
}

/**
 * 重置用户密码
 * @param userId 用户ID
 * @param data 密码数据，可选。如果不提供，则重置为默认密码“123456”
 * @returns 重置结果
 */
export function resetPassword(userId: number, data?: ResetPasswordRequest): Promise<ApiResponse> {
  // 根据文档，正确的端点是reset-password
  // 如果提供了密码数据，则重置为指定密码，否则重置为默认密码
  if (data && data.new_password) {
    const payload = {
      new_password: data.new_password,
      confirm_password: data.confirm_password
    }
    return post(`${API_PREFIX}/users/${userId}/reset-password`, payload)
  } else {
    // 不提供参数，重置为默认密码
    return post(`${API_PREFIX}/users/${userId}/reset-password`)
  }
}

// =========== 角色管理 API ===========

/**
 * 获取角色列表
 * @param params 查询参数
 * @returns 角色列表和总数
 */
export function getRoles(params?: PageQueryParams): Promise<RolePageResponse> {
  return get(`${API_PREFIX}/roles`, params)
}

/**
 * 获取角色详情
 * @param roleId 角色ID
 * @returns 角色详情，包括权限列表
 */
export function getRoleDetail(roleId: number): Promise<ApiResponse & { data: Role }> {
  return get(`${API_PREFIX}/roles/${roleId}`)
}

/**
 * 创建角色
 * @param data 角色数据
 * @returns 创建结果
 */
export function createRole(data: RoleCreateRequest): Promise<ApiResponse & { data: Role }> {
  return post(`${API_PREFIX}/roles`, data)
}

/**
 * 更新角色
 * @param roleId 角色ID
 * @param data 角色数据
 * @returns 更新结果
 */
export function updateRole(roleId: number, data: RoleUpdateRequest): Promise<ApiResponse & { data: Role }> {
  return put(`${API_PREFIX}/roles/${roleId}`, data)
}

/**
 * 删除角色
 * @param roleId 角色ID
 * @returns 删除结果
 */
export function deleteRole(roleId: number): Promise<ApiResponse> {
  return del(`${API_PREFIX}/roles/${roleId}`)
}

/**
 * 更新角色权限
 * @param roleId 角色ID
 * @param data 权限ID列表
 * @returns 更新结果
 */
export function updateRolePermissions(roleId: number, data: { permission_ids: number[] }): Promise<ApiResponse> {
  return post(`${API_PREFIX}/roles/${roleId}/assign-permissions`, data)
}

// =========== 权限管理 API ===========

/**
 * 获取权限列表（扁平结构）
 * @returns 权限列表
 */
export function getPermissions(): Promise<PermissionListResponse> {
  return get(`${API_PREFIX}/permissions`)
}

/**
 * 获取权限树（树形结构）
 * @returns 权限树
 */
export function getPermissionTree(): Promise<PermissionTreeResponse> {
  return get(`${API_PREFIX}/permissions/tree`)
}

/**
 * 获取权限详情
 * @param permissionId 权限ID
 * @returns 权限详情
 */
export function getPermissionDetail(permissionId: number): Promise<ApiResponse & { data: Permission }> {
  return get(`${API_PREFIX}/permissions/${permissionId}`)
}

/**
 * 创建权限
 * @param data 权限数据
 * @returns 创建结果
 */
export function createPermission(data: PermissionCreateRequest): Promise<ApiResponse & { data: Permission }> {
  return post(`${API_PREFIX}/permissions`, data)
}

/**
 * 更新权限
 * @param permissionId 权限ID
 * @param data 权限数据
 * @returns 更新结果
 */
export function updatePermission(permissionId: number, data: PermissionUpdateRequest): Promise<ApiResponse & { data: Permission }> {
  return put(`${API_PREFIX}/permissions/${permissionId}`, data)
}

/**
 * 删除权限
 * @param permissionId 权限ID
 * @returns 删除结果
 */
export function deletePermission(permissionId: number): Promise<ApiResponse> {
  return del(`${API_PREFIX}/permissions/${permissionId}`)
}
